import User from "../models/User";
import bcrypt from "bcryptjs";
import jwt from "jsonwebtoken";
import _ from "lodash";
import axios from "axios";

// 注册用户
export const register = async (req: any, res: any) => {
    try {
        // 获取用户输入的密码
        const { password } = req.body;

        // 生成盐并加密密码
        const salt = await bcrypt.genSalt(10);
        const encryptedPassword = await bcrypt.hash(password, salt);

        // 创建新用户并保存（只是一个示例）
        const newUser = new User({
            ...req.body,
            password: encryptedPassword,
        });

        await newUser.save();

        // 发送成功响应
        res.status(201).send("用户注册成功");
    } catch (error: any) {
        res.status(500).send("服务器错误: " + error?.message);
    }
};

// 用户登录
export const login = async (req: any, res: any) => {
    console.log("请求用户登录:", req.body);
    try {
        // 从请求体中获取用户名和密码
        const { username, password } = req.body;
        console.log("username:", username);
        console.log("password:", password);

        // 在数据库中查找用户
        const user: any = await User.findOne({ username });
        // console.log("在数据库中查找用户 user:", user);
        if (!user) {
            return res
                .status(401)
                .json({ message: "用户名或密码错误", status: "error" });
        }

        // 比较密码
        const isMatch = await bcrypt.compare(password, user.password);
        if (!isMatch) {
            return res
                .status(401)
                .json({ message: "用户名或密码错误", status: "error" });
        }

        // 创建 JWT
        const token = jwt.sign(
            { userId: user._id, username: user.username },
            "cgc", // 确保设置了环境变量 JWT_SECRET
            { expiresIn: "2h" } // 令牌有效期，例如1小时
        );

        // 登录成功，返回成功响应
        // 这里可以添加生成 token 的逻辑，如果您使用 JWT 进行认证
        res.json({
            message: "登录成功",
            status: "ok",
            type: "account",
            currentAuthority: "admin",
            token,
        });
    } catch (error: any) {
        res.status(500).json({ message: error.message, status: "error" });
    }
};

// 获取用户信息
export const getCurrentUser = async (req: any, res: any) => {
    console.log("获取用户信息:", req.body);
    try {
        // 假设用户ID存储在req.user中（由认证中间件添加）
        const user = await User.findById(req.user.userId).select("-password"); // 不返回密码
        if (!user) {
            return res.status(404).json({ message: "用户未找到" });
        }
        res.json(user);
    } catch (error: any) {
        res.status(500).json({ message: error.message });
    }
};

//登出
export const logout = async (req: any, res: any) => {
    res.status(201).json({
        message: '登出成功！'
    })
}


// 获取微信AccessToken
export const getWXAccessToken = async (req: any, res: any) => {
    console.log('获取微信AccessToken')
    try {
        const { appId, secret, code } = req.body;
        const result: any = await axios.get(`https://api.weixin.qq.com/sns/oauth2/access_token?appid=${appId}&secret=${secret}&code=${code}&grant_type=authorization_code`)

        if (result) {
            console.log('获取微信AccessToken result:', result)
            if (!_.isEmpty(result.data?.errcode)) {
                res.status(500).json({
                    status: "false",
                    message: result.data?.errmsg,
                    code: result.data?.errcode,
                })
            } else {

                res.status(200).json({
                    message: '获取微信AccessToken成功！',
                    status: "ok",
                    data: result.data,
                    openId: result.data.openId
                })
            }
        }

    } catch (error: any) {
        res.status(500).json({
            status: "false",
            data: error
        })
    }
}